[INFO] cloning repository https://github.com/devanbenz/simpledb-rs
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/devanbenz/simpledb-rs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdevanbenz%2Fsimpledb-rs", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdevanbenz%2Fsimpledb-rs'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 9f3fca3cc52dfd3c91f01bee0ff3cdb724404f1d
[INFO] checking devanbenz/simpledb-rs against master#82310651b93a594a3fd69015e1562186a080d94c for pr-145770
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdevanbenz%2Fsimpledb-rs" "/workspace/builds/worker-0-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/devanbenz/simpledb-rs
[INFO] finished tweaking git repo https://github.com/devanbenz/simpledb-rs
[INFO] tweaked toml for git repo https://github.com/devanbenz/simpledb-rs written to /workspace/builds/worker-0-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/devanbenz/simpledb-rs on toolchain 82310651b93a594a3fd69015e1562186a080d94c
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+82310651b93a594a3fd69015e1562186a080d94c" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/devanbenz/simpledb-rs already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+82310651b93a594a3fd69015e1562186a080d94c" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded tempdir v0.3.7
[INFO] [stderr]   Downloaded remove_dir_all v0.5.3
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+82310651b93a594a3fd69015e1562186a080d94c" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 0ab39dc289d972d4cf2f162bb5c407834f0087e8f7506be22cbe87b0442aa0ce
[INFO] running `Command { std: "docker" "start" "-a" "0ab39dc289d972d4cf2f162bb5c407834f0087e8f7506be22cbe87b0442aa0ce", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "0ab39dc289d972d4cf2f162bb5c407834f0087e8f7506be22cbe87b0442aa0ce", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "0ab39dc289d972d4cf2f162bb5c407834f0087e8f7506be22cbe87b0442aa0ce", kill_on_drop: false }`
[INFO] [stdout] 0ab39dc289d972d4cf2f162bb5c407834f0087e8f7506be22cbe87b0442aa0ce
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+82310651b93a594a3fd69015e1562186a080d94c" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 850fccf4b80d8c60bdb520227819ab358e7c06f90afc6106c589bec59e64fe78
[INFO] running `Command { std: "docker" "start" "-a" "850fccf4b80d8c60bdb520227819ab358e7c06f90afc6106c589bec59e64fe78", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.169
[INFO] [stderr]     Checking remove_dir_all v0.5.3
[INFO] [stderr]     Checking log v0.4.27
[INFO] [stderr]     Checking rand v0.4.6
[INFO] [stderr]     Checking tempdir v0.3.7
[INFO] [stderr]     Checking simpledb-rs v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] error[E0583]: file not found for module `concurrencymanager`
[INFO] [stdout]  --> src/lib.rs:7:1
[INFO] [stdout]   |
[INFO] [stdout] 7 | mod concurrencymanager;
[INFO] [stdout]   | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: to create the module `concurrencymanager`, create file "src/concurrencymanager.rs" or "src/concurrencymanager/mod.rs"
[INFO] [stdout]   = note: if there is a `mod concurrencymanager` elsewhere in the crate already, import it with `use crate::...` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0583]: file not found for module `concurrencymanager`
[INFO] [stdout]  --> src/lib.rs:7:1
[INFO] [stdout]   |
[INFO] [stdout] 7 | mod concurrencymanager;
[INFO] [stdout]   | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: to create the module `concurrencymanager`, create file "src/concurrencymanager.rs" or "src/concurrencymanager/mod.rs"
[INFO] [stdout]   = note: if there is a `mod concurrencymanager` elsewhere in the crate already, import it with `use crate::...` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]   --> src/logmanager.rs:13:6
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl LogIterator {
[INFO] [stdout]    |      ^^^^^^^^^^^ expected lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl LogIterator<'_> {
[INFO] [stdout]    |                 ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]   --> src/logmanager.rs:37:19
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl Iterator for LogIterator {
[INFO] [stdout]    |                   ^^^^^^^^^^^ expected lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl Iterator for LogIterator<'_> {
[INFO] [stdout]    |                              ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]   --> src/recoverymanager.rs:19:6
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl RecoveryManager {
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^ expected lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl RecoveryManager<'_> {
[INFO] [stdout]    |                     ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]   --> src/transaction.rs:17:6
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl BufferList {
[INFO] [stdout]    |      ^^^^^^^^^^ expected lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl BufferList<'_> {
[INFO] [stdout]    |                ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]   --> src/transaction.rs:18:63
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub fn new(buffer_manager: Rc<RefCell<BufferManager>>) -> BufferList {
[INFO] [stdout]    |                                                               ^^^^^^^^^^ expected named lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout]    = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
[INFO] [stdout] help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`, or if you will only have owned values
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub fn new(buffer_manager: Rc<RefCell<BufferManager>>) -> BufferList<'static> {
[INFO] [stdout]    |                                                                         +++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]   --> src/transaction.rs:67:6
[INFO] [stdout]    |
[INFO] [stdout] 67 | impl Transaction {
[INFO] [stdout]    |      ^^^^^^^^^^^ expected lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]    |
[INFO] [stdout] 67 | impl Transaction<'_> {
[INFO] [stdout]    |                 ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/filemanager.rs:350:9
[INFO] [stdout]     |
[INFO] [stdout] 350 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tempdir::TempDir`
[INFO] [stdout]    --> src/filemanager.rs:351:9
[INFO] [stdout]     |
[INFO] [stdout] 351 |     use tempdir::TempDir;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/logmanager.rs:194:9
[INFO] [stdout]     |
[INFO] [stdout] 194 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::rc::Rc`
[INFO] [stdout]    --> src/logmanager.rs:195:9
[INFO] [stdout]     |
[INFO] [stdout] 195 |     use std::rc::Rc;
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tempdir::TempDir`
[INFO] [stdout]    --> src/logmanager.rs:196:9
[INFO] [stdout]     |
[INFO] [stdout] 196 |     use tempdir::TempDir;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::filemanager::Page`
[INFO] [stdout]  --> src/recoverymanager.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::filemanager::Page;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `LogIterator`
[INFO] [stdout]  --> src/recoverymanager.rs:3:25
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::logmanager::{LogIterator, LogManager};
[INFO] [stdout]   |                         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ref`
[INFO] [stdout]  --> src/transaction.rs:7:17
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::cell::{Ref, RefCell};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashSet`
[INFO] [stdout]  --> src/transaction.rs:8:33
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                                 ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]   --> src/logmanager.rs:13:6
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl LogIterator {
[INFO] [stdout]    |      ^^^^^^^^^^^ expected lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl LogIterator<'_> {
[INFO] [stdout]    |                 ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]   --> src/logmanager.rs:37:19
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl Iterator for LogIterator {
[INFO] [stdout]    |                   ^^^^^^^^^^^ expected lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl Iterator for LogIterator<'_> {
[INFO] [stdout]    |                              ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]   --> src/recoverymanager.rs:19:6
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl RecoveryManager {
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^ expected lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl RecoveryManager<'_> {
[INFO] [stdout]    |                     ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]   --> src/transaction.rs:17:6
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl BufferList {
[INFO] [stdout]    |      ^^^^^^^^^^ expected lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl BufferList<'_> {
[INFO] [stdout]    |                ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]   --> src/transaction.rs:18:63
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub fn new(buffer_manager: Rc<RefCell<BufferManager>>) -> BufferList {
[INFO] [stdout]    |                                                               ^^^^^^^^^^ expected named lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout]    = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
[INFO] [stdout] help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`, or if you will only have owned values
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub fn new(buffer_manager: Rc<RefCell<BufferManager>>) -> BufferList<'static> {
[INFO] [stdout]    |                                                                         +++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]   --> src/transaction.rs:67:6
[INFO] [stdout]    |
[INFO] [stdout] 67 | impl Transaction {
[INFO] [stdout]    |      ^^^^^^^^^^^ expected lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]    |
[INFO] [stdout] 67 | impl Transaction<'_> {
[INFO] [stdout]    |                 ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::filemanager::Page`
[INFO] [stdout]  --> src/recoverymanager.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::filemanager::Page;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `LogIterator`
[INFO] [stdout]  --> src/recoverymanager.rs:3:25
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::logmanager::{LogIterator, LogManager};
[INFO] [stdout]   |                         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ref`
[INFO] [stdout]  --> src/transaction.rs:7:17
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::cell::{Ref, RefCell};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashSet`
[INFO] [stdout]  --> src/transaction.rs:8:33
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                                 ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0072]: recursive types `RecoveryManager` and `Transaction` have infinite size
[INFO] [stdout]   --> src/recoverymanager.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct RecoveryManager<'a> {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 15 |     transaction: Transaction<'a>,
[INFO] [stdout]    |                  --------------- recursive without indirection
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/transaction.rs:59:1
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct Transaction<'a> {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     recovery_manager: RecoveryManager<'a>,
[INFO] [stdout]    |                       ------------------- recursive without indirection
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:41:60
[INFO] [stdout]    |
[INFO] [stdout] 41 |     pub fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                                                            ^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] help: you might have meant to use `Self` to refer to the implementing type
[INFO] [stdout]    |
[INFO] [stdout] 41 -     pub fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout] 41 +     pub fn create_log_record(bytes: Vec<u8>) -> Option<Box<Self>> {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:23:56
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                                                        ^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] help: you might have meant to use `Self` to refer to the implementing type
[INFO] [stdout]    |
[INFO] [stdout] 23 -     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout] 23 +     fn create_log_record(bytes: Vec<u8>) -> Option<Box<Self>> {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0072]: recursive types `RecoveryManager` and `Transaction` have infinite size
[INFO] [stdout]   --> src/recoverymanager.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct RecoveryManager<'a> {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 15 |     transaction: Transaction<'a>,
[INFO] [stdout]    |                  --------------- recursive without indirection
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/transaction.rs:59:1
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct Transaction<'a> {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     recovery_manager: RecoveryManager<'a>,
[INFO] [stdout]    |                       ------------------- recursive without indirection
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:41:60
[INFO] [stdout]    |
[INFO] [stdout] 41 |     pub fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                                                            ^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] help: you might have meant to use `Self` to refer to the implementing type
[INFO] [stdout]    |
[INFO] [stdout] 41 -     pub fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout] 41 +     pub fn create_log_record(bytes: Vec<u8>) -> Option<Box<Self>> {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:23:56
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                                                        ^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] help: you might have meant to use `Self` to refer to the implementing type
[INFO] [stdout]    |
[INFO] [stdout] 23 -     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout] 23 +     fn create_log_record(bytes: Vec<u8>) -> Option<Box<Self>> {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:27:27
[INFO] [stdout]    |
[INFO] [stdout] 27 |             CHECKPOINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                           ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:27:27
[INFO] [stdout]    |
[INFO] [stdout] 27 |             CHECKPOINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:28:22
[INFO] [stdout]    |
[INFO] [stdout] 28 |             START => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                      ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:28:22
[INFO] [stdout]    |
[INFO] [stdout] 28 |             START => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:29:23
[INFO] [stdout]    |
[INFO] [stdout] 29 |             COMMIT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:29:23
[INFO] [stdout]    |
[INFO] [stdout] 29 |             COMMIT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:30:25
[INFO] [stdout]    |
[INFO] [stdout] 30 |             ROLLBACK => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                         ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:30:25
[INFO] [stdout]    |
[INFO] [stdout] 30 |             ROLLBACK => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:31:23
[INFO] [stdout]    |
[INFO] [stdout] 31 |             SETINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:31:23
[INFO] [stdout]    |
[INFO] [stdout] 31 |             SETINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:32:26
[INFO] [stdout]    |
[INFO] [stdout] 32 |             SETSTRING => Some(Box::new(SetStringLogRecord::new(page))),
[INFO] [stdout]    |                          ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:32:26
[INFO] [stdout]    |
[INFO] [stdout] 32 |             SETSTRING => Some(Box::new(SetStringLogRecord::new(page))),
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:33:18
[INFO] [stdout]    |
[INFO] [stdout] 33 |             _ => None,
[INFO] [stdout]    |                  ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:45:27
[INFO] [stdout]    |
[INFO] [stdout] 45 |             CHECKPOINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                           ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:45:27
[INFO] [stdout]    |
[INFO] [stdout] 45 |             CHECKPOINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:46:22
[INFO] [stdout]    |
[INFO] [stdout] 46 |             START => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                      ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:46:22
[INFO] [stdout]    |
[INFO] [stdout] 46 |             START => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:47:23
[INFO] [stdout]    |
[INFO] [stdout] 47 |             COMMIT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:47:23
[INFO] [stdout]    |
[INFO] [stdout] 47 |             COMMIT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:48:25
[INFO] [stdout]    |
[INFO] [stdout] 48 |             ROLLBACK => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                         ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:48:25
[INFO] [stdout]    |
[INFO] [stdout] 48 |             ROLLBACK => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:49:23
[INFO] [stdout]    |
[INFO] [stdout] 49 |             SETINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:49:23
[INFO] [stdout]    |
[INFO] [stdout] 49 |             SETINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:50:26
[INFO] [stdout]    |
[INFO] [stdout] 50 |             SETSTRING => Some(Box::new(SetStringLogRecord::new(page))),
[INFO] [stdout]    |                          ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:50:26
[INFO] [stdout]    |
[INFO] [stdout] 50 |             SETSTRING => Some(Box::new(SetStringLogRecord::new(page))),
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:51:18
[INFO] [stdout]    |
[INFO] [stdout] 51 |             _ => None,
[INFO] [stdout]    |                  ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]    --> src/recoverymanager.rs:104:32
[INFO] [stdout]     |
[INFO] [stdout] 104 |             if let Some(rec) = LogRecordFactory::create_log_record(b.to_vec()) {
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/logrecord.rs:23:8
[INFO] [stdout]     |
[INFO] [stdout] 14  | pub trait LogRecord {
[INFO] [stdout]     |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]     = help: the following types implement `LogRecord`:
[INFO] [stdout]               logrecord::SetStringLogRecord
[INFO] [stdout]               logrecord::SetIntLogRecord
[INFO] [stdout]               logrecord::CommitLogRecord
[INFO] [stdout]             consider defining an enum where each variant holds one of these types,
[INFO] [stdout]             implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    --> src/logrecord.rs:23:26
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    --> src/logrecord.rs:23:71
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]     |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]    --> src/recoverymanager.rs:118:32
[INFO] [stdout]     |
[INFO] [stdout] 118 |             if let Some(rec) = LogRecordFactory::create_log_record(b.to_vec()) {
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/logrecord.rs:23:8
[INFO] [stdout]     |
[INFO] [stdout] 14  | pub trait LogRecord {
[INFO] [stdout]     |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]     = help: the following types implement `LogRecord`:
[INFO] [stdout]               logrecord::SetStringLogRecord
[INFO] [stdout]               logrecord::SetIntLogRecord
[INFO] [stdout]               logrecord::CommitLogRecord
[INFO] [stdout]             consider defining an enum where each variant holds one of these types,
[INFO] [stdout]             implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    --> src/logrecord.rs:23:26
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    --> src/logrecord.rs:23:71
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]     |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]    --> src/recoverymanager.rs:123:21
[INFO] [stdout]     |
[INFO] [stdout] 123 |                     finished_txns.push(rec);
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/logrecord.rs:23:8
[INFO] [stdout]     |
[INFO] [stdout] 14  | pub trait LogRecord {
[INFO] [stdout]     |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]     = help: the following types implement `LogRecord`:
[INFO] [stdout]               logrecord::SetStringLogRecord
[INFO] [stdout]               logrecord::SetIntLogRecord
[INFO] [stdout]               logrecord::CommitLogRecord
[INFO] [stdout]             consider defining an enum where each variant holds one of these types,
[INFO] [stdout]             implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    --> src/logrecord.rs:23:26
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    --> src/logrecord.rs:23:71
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]     |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]    --> src/recoverymanager.rs:115:33
[INFO] [stdout]     |
[INFO] [stdout] 115 |         let mut finished_txns = Vec::new();
[INFO] [stdout]     |                                 ^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/logrecord.rs:23:8
[INFO] [stdout]     |
[INFO] [stdout] 14  | pub trait LogRecord {
[INFO] [stdout]     |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]     = help: the following types implement `LogRecord`:
[INFO] [stdout]               logrecord::SetStringLogRecord
[INFO] [stdout]               logrecord::SetIntLogRecord
[INFO] [stdout]               logrecord::CommitLogRecord
[INFO] [stdout]             consider defining an enum where each variant holds one of these types,
[INFO] [stdout]             implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    --> src/logrecord.rs:23:26
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    --> src/logrecord.rs:23:71
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]     |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]    --> src/recoverymanager.rs:124:28
[INFO] [stdout]     |
[INFO] [stdout] 124 |                 } else if !finished_txns.contains(&rec) {
[INFO] [stdout]     |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/logrecord.rs:23:8
[INFO] [stdout]     |
[INFO] [stdout] 14  | pub trait LogRecord {
[INFO] [stdout]     |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]     = help: the following types implement `LogRecord`:
[INFO] [stdout]               logrecord::SetStringLogRecord
[INFO] [stdout]               logrecord::SetIntLogRecord
[INFO] [stdout]               logrecord::CommitLogRecord
[INFO] [stdout]             consider defining an enum where each variant holds one of these types,
[INFO] [stdout]             implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    --> src/logrecord.rs:23:26
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    --> src/logrecord.rs:23:71
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]     |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: can't compare `dyn LogRecord` with `dyn LogRecord`
[INFO] [stdout]    --> src/recoverymanager.rs:124:42
[INFO] [stdout]     |
[INFO] [stdout] 124 |                 } else if !finished_txns.contains(&rec) {
[INFO] [stdout]     |                                          ^^^^^^^^ no implementation for `dyn LogRecord == dyn LogRecord`
[INFO] [stdout]     |
[INFO] [stdout]     = help: the trait `PartialEq` is not implemented for `dyn LogRecord`
[INFO] [stdout]     = note: required for `Box<dyn LogRecord>` to implement `PartialEq`
[INFO] [stdout] note: required by a bound in `core::slice::<impl [T]>::contains`
[INFO] [stdout]    --> /rustc/82310651b93a594a3fd69015e1562186a080d94c/library/core/src/slice/mod.rs:2658:5
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: the `Self` constructor can only be used with tuple or unit structs
[INFO] [stdout]   --> src/transaction.rs:73:53
[INFO] [stdout]    |
[INFO] [stdout] 73 |         let recovery_manager = RecoveryManager::new(Self, 0, log_manager, buffer_manager.clone());
[INFO] [stdout]    |                                                     ^^^^ help: use curly brackets: `Self { /* fields */ }`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/transaction.rs:94:43
[INFO] [stdout]    |
[INFO] [stdout] 94 |     pub fn get_int(&self, offset: i32) -> Option<i32> {}
[INFO] [stdout]    |            -------                        ^^^^^^^^^^^ expected `Option<i32>`, found `()`
[INFO] [stdout]    |            |
[INFO] [stdout]    |            implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout]    |
[INFO] [stdout]    = note:   expected enum `Option<i32>`
[INFO] [stdout]            found unit type `()`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/transaction.rs:96:68
[INFO] [stdout]    |
[INFO] [stdout] 96 |     pub fn get_string(&self, block_id: &BlockId, offset: usize) -> Option<String> {}
[INFO] [stdout]    |            ----------                                              ^^^^^^^^^^^^^^ expected `Option<String>`, found `()`
[INFO] [stdout]    |            |
[INFO] [stdout]    |            implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout]    |
[INFO] [stdout]    = note:   expected enum `Option<String>`
[INFO] [stdout]            found unit type `()`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/transaction.rs:110:40
[INFO] [stdout]     |
[INFO] [stdout] 110 |     pub fn available_buffers(&self) -> Option<usize> {}
[INFO] [stdout]     |            -----------------           ^^^^^^^^^^^^^ expected `Option<usize>`, found `()`
[INFO] [stdout]     |            |
[INFO] [stdout]     |            implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout]     |
[INFO] [stdout]     = note:   expected enum `Option<usize>`
[INFO] [stdout]             found unit type `()`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/transaction.rs:112:22
[INFO] [stdout]     |
[INFO] [stdout] 112 |     pub fn size() -> usize {}
[INFO] [stdout]     |            ----      ^^^^^ expected `usize`, found `()`
[INFO] [stdout]     |            |
[INFO] [stdout]     |            implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/transaction.rs:114:24
[INFO] [stdout]     |
[INFO] [stdout] 114 |     pub fn append() -> BlockId {}
[INFO] [stdout]     |            ------      ^^^^^^^ expected `BlockId`, found `()`
[INFO] [stdout]     |            |
[INFO] [stdout]     |            implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/transaction.rs:116:28
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub fn block_size() -> usize {}
[INFO] [stdout]     |            ----------      ^^^^^ expected `usize`, found `()`
[INFO] [stdout]     |            |
[INFO] [stdout]     |            implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:27:27
[INFO] [stdout]    |
[INFO] [stdout] 27 |             CHECKPOINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                           ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:27:27
[INFO] [stdout]    |
[INFO] [stdout] 27 |             CHECKPOINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:28:22
[INFO] [stdout]    |
[INFO] [stdout] 28 |             START => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                      ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:28:22
[INFO] [stdout]    |
[INFO] [stdout] 28 |             START => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:29:23
[INFO] [stdout]    |
[INFO] [stdout] 29 |             COMMIT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:29:23
[INFO] [stdout]    |
[INFO] [stdout] 29 |             COMMIT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:30:25
[INFO] [stdout]    |
[INFO] [stdout] 30 |             ROLLBACK => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                         ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:30:25
[INFO] [stdout]    |
[INFO] [stdout] 30 |             ROLLBACK => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:31:23
[INFO] [stdout]    |
[INFO] [stdout] 31 |             SETINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:31:23
[INFO] [stdout]    |
[INFO] [stdout] 31 |             SETINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:32:26
[INFO] [stdout]    |
[INFO] [stdout] 32 |             SETSTRING => Some(Box::new(SetStringLogRecord::new(page))),
[INFO] [stdout]    |                          ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:32:26
[INFO] [stdout]    |
[INFO] [stdout] 32 |             SETSTRING => Some(Box::new(SetStringLogRecord::new(page))),
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:33:18
[INFO] [stdout]    |
[INFO] [stdout] 33 |             _ => None,
[INFO] [stdout]    |                  ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:45:27
[INFO] [stdout]    |
[INFO] [stdout] 45 |             CHECKPOINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                           ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:45:27
[INFO] [stdout]    |
[INFO] [stdout] 45 |             CHECKPOINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:46:22
[INFO] [stdout]    |
[INFO] [stdout] 46 |             START => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                      ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:46:22
[INFO] [stdout]    |
[INFO] [stdout] 46 |             START => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:47:23
[INFO] [stdout]    |
[INFO] [stdout] 47 |             COMMIT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:47:23
[INFO] [stdout]    |
[INFO] [stdout] 47 |             COMMIT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:48:25
[INFO] [stdout]    |
[INFO] [stdout] 48 |             ROLLBACK => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                         ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:48:25
[INFO] [stdout]    |
[INFO] [stdout] 48 |             ROLLBACK => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:49:23
[INFO] [stdout]    |
[INFO] [stdout] 49 |             SETINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:49:23
[INFO] [stdout]    |
[INFO] [stdout] 49 |             SETINT => Some(Box::new(SetIntLogRecord::new(page))),
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:50:26
[INFO] [stdout]    |
[INFO] [stdout] 50 |             SETSTRING => Some(Box::new(SetStringLogRecord::new(page))),
[INFO] [stdout]    |                          ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:50:26
[INFO] [stdout]    |
[INFO] [stdout] 50 |             SETSTRING => Some(Box::new(SetStringLogRecord::new(page))),
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]   --> src/logrecord.rs:51:18
[INFO] [stdout]    |
[INFO] [stdout] 51 |             _ => None,
[INFO] [stdout]    |                  ^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/logrecord.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait LogRecord {
[INFO] [stdout]    |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]    = help: the following types implement `LogRecord`:
[INFO] [stdout]              logrecord::SetStringLogRecord
[INFO] [stdout]              logrecord::SetIntLogRecord
[INFO] [stdout]              logrecord::CommitLogRecord
[INFO] [stdout]            consider defining an enum where each variant holds one of these types,
[INFO] [stdout]            implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]    |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    |
[INFO] [stdout] 23 |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]    |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]    --> src/recoverymanager.rs:104:32
[INFO] [stdout]     |
[INFO] [stdout] 104 |             if let Some(rec) = LogRecordFactory::create_log_record(b.to_vec()) {
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/logrecord.rs:23:8
[INFO] [stdout]     |
[INFO] [stdout] 14  | pub trait LogRecord {
[INFO] [stdout]     |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]     = help: the following types implement `LogRecord`:
[INFO] [stdout]               logrecord::SetStringLogRecord
[INFO] [stdout]               logrecord::SetIntLogRecord
[INFO] [stdout]               logrecord::CommitLogRecord
[INFO] [stdout]             consider defining an enum where each variant holds one of these types,
[INFO] [stdout]             implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    --> src/logrecord.rs:23:26
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    --> src/logrecord.rs:23:71
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]     |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]    --> src/recoverymanager.rs:118:32
[INFO] [stdout]     |
[INFO] [stdout] 118 |             if let Some(rec) = LogRecordFactory::create_log_record(b.to_vec()) {
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/logrecord.rs:23:8
[INFO] [stdout]     |
[INFO] [stdout] 14  | pub trait LogRecord {
[INFO] [stdout]     |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]     = help: the following types implement `LogRecord`:
[INFO] [stdout]               logrecord::SetStringLogRecord
[INFO] [stdout]               logrecord::SetIntLogRecord
[INFO] [stdout]               logrecord::CommitLogRecord
[INFO] [stdout]             consider defining an enum where each variant holds one of these types,
[INFO] [stdout]             implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    --> src/logrecord.rs:23:26
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    --> src/logrecord.rs:23:71
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]     |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]    --> src/recoverymanager.rs:123:21
[INFO] [stdout]     |
[INFO] [stdout] 123 |                     finished_txns.push(rec);
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/logrecord.rs:23:8
[INFO] [stdout]     |
[INFO] [stdout] 14  | pub trait LogRecord {
[INFO] [stdout]     |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]     = help: the following types implement `LogRecord`:
[INFO] [stdout]               logrecord::SetStringLogRecord
[INFO] [stdout]               logrecord::SetIntLogRecord
[INFO] [stdout]               logrecord::CommitLogRecord
[INFO] [stdout]             consider defining an enum where each variant holds one of these types,
[INFO] [stdout]             implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    --> src/logrecord.rs:23:26
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    --> src/logrecord.rs:23:71
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]     |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]    --> src/recoverymanager.rs:115:33
[INFO] [stdout]     |
[INFO] [stdout] 115 |         let mut finished_txns = Vec::new();
[INFO] [stdout]     |                                 ^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/logrecord.rs:23:8
[INFO] [stdout]     |
[INFO] [stdout] 14  | pub trait LogRecord {
[INFO] [stdout]     |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]     = help: the following types implement `LogRecord`:
[INFO] [stdout]               logrecord::SetStringLogRecord
[INFO] [stdout]               logrecord::SetIntLogRecord
[INFO] [stdout]               logrecord::CommitLogRecord
[INFO] [stdout]             consider defining an enum where each variant holds one of these types,
[INFO] [stdout]             implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    --> src/logrecord.rs:23:26
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    --> src/logrecord.rs:23:71
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]     |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `LogRecord` is not dyn compatible
[INFO] [stdout]    --> src/recoverymanager.rs:124:28
[INFO] [stdout]     |
[INFO] [stdout] 124 |                 } else if !finished_txns.contains(&rec) {
[INFO] [stdout]     |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `LogRecord` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/logrecord.rs:23:8
[INFO] [stdout]     |
[INFO] [stdout] 14  | pub trait LogRecord {
[INFO] [stdout]     |           --------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^ ...because associated function `create_log_record` has no `self` parameter
[INFO] [stdout]     = help: the following types implement `LogRecord`:
[INFO] [stdout]               logrecord::SetStringLogRecord
[INFO] [stdout]               logrecord::SetIntLogRecord
[INFO] [stdout]               logrecord::CommitLogRecord
[INFO] [stdout]             consider defining an enum where each variant holds one of these types,
[INFO] [stdout]             implementing `LogRecord` for this new enum and using it instead
[INFO] [stdout] help: consider turning `create_log_record` into a method by giving it a `&self` argument
[INFO] [stdout]    --> src/logrecord.rs:23:26
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(&self, bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> {
[INFO] [stdout]     |                          ++++++
[INFO] [stdout] help: alternatively, consider constraining `create_log_record` so it does not apply to trait objects
[INFO] [stdout]    --> src/logrecord.rs:23:71
[INFO] [stdout]     |
[INFO] [stdout] 23  |     fn create_log_record(bytes: Vec<u8>) -> Option<Box<dyn LogRecord>> where Self: Sized {
[INFO] [stdout]     |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: can't compare `dyn LogRecord` with `dyn LogRecord`
[INFO] [stdout]    --> src/recoverymanager.rs:124:42
[INFO] [stdout]     |
[INFO] [stdout] 124 |                 } else if !finished_txns.contains(&rec) {
[INFO] [stdout]     |                                          ^^^^^^^^ no implementation for `dyn LogRecord == dyn LogRecord`
[INFO] [stdout]     |
[INFO] [stdout]     = help: the trait `PartialEq` is not implemented for `dyn LogRecord`
[INFO] [stdout]     = note: required for `Box<dyn LogRecord>` to implement `PartialEq`
[INFO] [stdout] note: required by a bound in `core::slice::<impl [T]>::contains`
[INFO] [stdout]    --> /rustc/82310651b93a594a3fd69015e1562186a080d94c/library/core/src/slice/mod.rs:2658:5
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: the `Self` constructor can only be used with tuple or unit structs
[INFO] [stdout]   --> src/transaction.rs:73:53
[INFO] [stdout]    |
[INFO] [stdout] 73 |         let recovery_manager = RecoveryManager::new(Self, 0, log_manager, buffer_manager.clone());
[INFO] [stdout]    |                                                     ^^^^ help: use curly brackets: `Self { /* fields */ }`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/transaction.rs:94:43
[INFO] [stdout]    |
[INFO] [stdout] 94 |     pub fn get_int(&self, offset: i32) -> Option<i32> {}
[INFO] [stdout]    |            -------                        ^^^^^^^^^^^ expected `Option<i32>`, found `()`
[INFO] [stdout]    |            |
[INFO] [stdout]    |            implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout]    |
[INFO] [stdout]    = note:   expected enum `Option<i32>`
[INFO] [stdout]            found unit type `()`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/transaction.rs:96:68
[INFO] [stdout]    |
[INFO] [stdout] 96 |     pub fn get_string(&self, block_id: &BlockId, offset: usize) -> Option<String> {}
[INFO] [stdout]    |            ----------                                              ^^^^^^^^^^^^^^ expected `Option<String>`, found `()`
[INFO] [stdout]    |            |
[INFO] [stdout]    |            implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout]    |
[INFO] [stdout]    = note:   expected enum `Option<String>`
[INFO] [stdout]            found unit type `()`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/transaction.rs:110:40
[INFO] [stdout]     |
[INFO] [stdout] 110 |     pub fn available_buffers(&self) -> Option<usize> {}
[INFO] [stdout]     |            -----------------           ^^^^^^^^^^^^^ expected `Option<usize>`, found `()`
[INFO] [stdout]     |            |
[INFO] [stdout]     |            implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout]     |
[INFO] [stdout]     = note:   expected enum `Option<usize>`
[INFO] [stdout]             found unit type `()`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/transaction.rs:112:22
[INFO] [stdout]     |
[INFO] [stdout] 112 |     pub fn size() -> usize {}
[INFO] [stdout]     |            ----      ^^^^^ expected `usize`, found `()`
[INFO] [stdout]     |            |
[INFO] [stdout]     |            implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/transaction.rs:114:24
[INFO] [stdout]     |
[INFO] [stdout] 114 |     pub fn append() -> BlockId {}
[INFO] [stdout]     |            ------      ^^^^^^^ expected `BlockId`, found `()`
[INFO] [stdout]     |            |
[INFO] [stdout]     |            implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/transaction.rs:116:28
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub fn block_size() -> usize {}
[INFO] [stdout]     |            ----------      ^^^^^ expected `usize`, found `()`
[INFO] [stdout]     |            |
[INFO] [stdout]     |            implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0391]: cycle detected when computing drop-check constraints for `recoverymanager::RecoveryManager`
[INFO] [stdout]   --> src/recoverymanager.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct RecoveryManager<'a> {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] note: ...which requires computing drop-check constraints for `transaction::Transaction`...
[INFO] [stdout]   --> src/transaction.rs:59:1
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct Transaction<'a> {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    = note: ...which again requires computing drop-check constraints for `recoverymanager::RecoveryManager`, completing the cycle
[INFO] [stdout]    = note: cycle used when computing dropck types for `recoverymanager::RecoveryManager<'_>`
[INFO] [stdout]    = note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0038, E0072, E0106, E0277, E0308, E0391, E0583, E0726.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0038`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `simpledb-rs` (lib) due to 50 previous errors; 9 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] error[E0391]: cycle detected when computing drop-check constraints for `recoverymanager::RecoveryManager`
[INFO] [stdout]   --> src/recoverymanager.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct RecoveryManager<'a> {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] note: ...which requires computing drop-check constraints for `transaction::Transaction`...
[INFO] [stdout]   --> src/transaction.rs:59:1
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct Transaction<'a> {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    = note: ...which again requires computing drop-check constraints for `recoverymanager::RecoveryManager`, completing the cycle
[INFO] [stdout]    = note: cycle used when computing dropck types for `recoverymanager::RecoveryManager<'_>`
[INFO] [stdout]    = note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0038, E0072, E0106, E0277, E0308, E0391, E0583, E0726.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0038`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `simpledb-rs` (lib test) due to 50 previous errors; 4 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "850fccf4b80d8c60bdb520227819ab358e7c06f90afc6106c589bec59e64fe78", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "850fccf4b80d8c60bdb520227819ab358e7c06f90afc6106c589bec59e64fe78", kill_on_drop: false }`
[INFO] [stdout] 850fccf4b80d8c60bdb520227819ab358e7c06f90afc6106c589bec59e64fe78
